package co.unal.visor.util;

public final class BitWise {

    public static byte[] intToByteArrayBE(int value) {
        return new byte[]{
                    (byte) (value >>> 24),
                    (byte) (value >>> 16),
                    (byte) (value >>> 8),
                    (byte) value};
    }

    public static byte[] intToByteArrayLE(int value) {
        return new byte[]{
                    (byte) value,
                    (byte) (value >>> 8),
                    (byte) (value >>> 16),
                    (byte) (value >>> 24)
                    };
    }

    public static byte[] longToByteArrayBE(long value) {
        return new byte[]{
                    (byte) (value >>> 56),
                    (byte) (value >>> 48),
                    (byte) (value >>> 40),
                    (byte) (value >>> 32),
                    (byte) (value >>> 24),
                    (byte) (value >>> 16),
                    (byte) (value >>> 8),
                    (byte) value};
    }

    public static byte[] longToByteArrayLE(long value) {
        return new byte[]{
                    (byte) (value),
                    (byte) (value >>> 8),
                    (byte) (value >>> 16),
                    (byte) (value >>> 24),
                    (byte) (value >>> 32),
                    (byte) (value >>> 40),
                    (byte) (value >>> 48),
                    (byte) (value >>> 56)};
    }

    public static int byteArrayToIntLE(byte[] value) {
        int retorno = 0;
        for (int i = 0; i < value.length; i++) {
            retorno += (value[i] & 0xff) << (8 * i);
        }
        return retorno;
    }
    
    public static long byteArrayToLongLE(byte[] value) {
        long retorno = 0;
        for (int i = 0; i < value.length; i++) {
            retorno += (value[i] & 0xff) << (8 * i);
        }
        return retorno;
    }
    
    public static int byteArrayToIntBE(byte[] value) {
        int retorno = 0;
        for (int i = 0; i < value.length; i++) {
            retorno += (value[i] & 0xff) >> (8 * i);
        }
        return retorno;
    }


   
    //verificar
    public static long byteArrayToLongBE(byte[] value) {
        long retorno = 0;
        for (int i = 0; i < value.length; i++) {
            retorno += (value[i] & 0xff) >> (8 * i);
        }
        return retorno;
    }
    /*
     * Metodo sin probar
     */
    public static String byteArrayToHexStringLE(byte[] value){
    	String retorno="";
    	for (int i = 0; i < value.length; i++) {
    		retorno+=Integer.toHexString(value[i]);
    	}
    	return retorno;
    }
    /*
     * Metodo sin probar
     */
    public static String byteArrayToCharStringLE(byte[] value){
    	String retorno="";
    	for (int i = 0; i < value.length; i++) {
    		retorno+=(char)value[i];
    	}
    	return retorno;
    }
    public static void printHexByteArray(byte [] input){
    	for (int i = 0; i < input.length; i++) {
    		System.out.print(Integer.toHexString(input[i]));
    	}
    }
}
